package com.mini.grpc.transport;

import com.mini.grpc.common.Metadata;
import com.mini.grpc.common.MethodDescriptor;

import java.net.SocketAddress;

/**
 * ServerListener接口定义了服务端监听器的功能。
 * 
 * <p>服务端监听器用于接收来自客户端的连接和请求。
 */
public interface ServerListener {
    
    /**
     * 当收到新的流请求时调用
     *
     * @param stream 服务端流
     * @param method 方法描述符
     * @param headers 头部元数据
     * @param remoteAddress 远程地址
     * @param <ReqT> 请求类型
     * @param <RespT> 响应类型
     * @return 服务端流监听器
     */
    <ReqT, RespT> ServerStreamListener<ReqT> streamCreated(
            ServerStream<RespT> stream,
            MethodDescriptor<ReqT, RespT> method,
            Metadata headers,
            SocketAddress remoteAddress);
    
    /**
     * 当服务端传输关闭时调用
     */
    void transportTerminated();
} 